﻿using App_Clinique.ClassLibrary;
using App_Clinique.ClassLibrary.Classes;
using App_Clinique.ClassLibrary.Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace App_Clinique
{
    public partial class PatientForm : Form
    { 
        public Patient patientDb { get; set; }
        public DossierMedical dossiermecidalDb { get; set; }
        public OperationChirurgicale operationchirurgicale { get; set; }

        public PatientForm()
        {
            InitializeComponent();
        }

        private void PatientForm_Load(object sender, EventArgs e)
        {
            // Remplissage de la liste déroulante civilité
            cb_civ.DataSource = Enum.GetValues(typeof(Civilite)).Cast<Civilite>();

            switch (Singleton.Current.ModeCourant)
            {
                case Singleton.Mode.Consultation:
                    Singleton.Current.Consultations = Consultation.GetList(patientDb.PatientID);
                    Singleton.Current.ArretsMaladie = ArretMaladie.GetList(patientDb.PatientID);
                    Singleton.Current.OperationsChirurgicales = OperationChirurgicale.GetList(patientDb.PatientID);
                    Singleton.Current.Ordonnances = Ordonnance.GetList(patientDb.PatientID);
                    dossiermecidalDb = DossierMedical.Get((Guid)patientDb.DocumentID);

                    InitializeArretMaladieDataGridView();
                    InitializeOperationsChirurgicalesGridView();
                    InitializeConsultationsDataGridView();

                    // Récupération des informations du patient
                    cb_civ.SelectedItem = patientDb.Civilite;
                    txt_nom.Text = patientDb.Nom;
                    txt_prenom.Text = patientDb.Prenom;
                    txt_numrue.Text = patientDb.NumRue.ToString();
                    txt_nomrue.Text = patientDb.NomRue;
                    txt_compadr.Text = patientDb.ComplementAdresse;
                    txt_cp.Text = patientDb.CodePostal;
                    txt_ville.Text = patientDb.Ville;
                    txt_secu.Text = patientDb.NumeroSecuriteSociale;

                    // Blocage de saisie ou modification des champs
                    cb_civ.Enabled = false;
                    txt_nom.Enabled = false;
                    txt_prenom.Enabled = false;
                    txt_numrue.Enabled = false;
                    txt_nomrue.Enabled = false;
                    txt_compadr.Enabled = false;
                    txt_cp.Enabled = false;
                    txt_ville.Enabled = false;
                    txt_secu.Enabled = false;
                break;
            }

        }

        private void InitializeConsultationsDataGridView()
        {
            try
            {
                ConsultationdataGridView.AutoGenerateColumns = false;
                ConsultationdataGridView.DataSource = Singleton.Current.Consultations;

                ConsultationdataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
                ConsultationdataGridView.BorderStyle = BorderStyle.Fixed3D;

                ConsultationdataGridView.Show();
            }
            catch (InvalidCastException e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void InitializeArretMaladieDataGridView()
        {
            try
            {
                ArretMaladieDataGridView.AutoGenerateColumns = false;
                ArretMaladieDataGridView.DataSource = Singleton.Current.ArretsMaladie;

                ArretMaladieDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
                ArretMaladieDataGridView.BorderStyle = BorderStyle.Fixed3D;

                ArretMaladieDataGridView.Show();
            }
            catch (InvalidCastException e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void InitializeOperationsChirurgicalesGridView()
        {
            try
            {
                OperationsDataGridView.AutoGenerateColumns = false;
                OperationsDataGridView.DataSource = Singleton.Current.OperationsChirurgicales;

                OperationsDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
                OperationsDataGridView.BorderStyle = BorderStyle.Fixed3D;

                OperationsDataGridView.Show();
            }
            catch (InvalidCastException e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void InitializeOrdonnanceDataGridView()
        {
            try
            {
                OperationsDataGridView.AutoGenerateColumns = false;
                OperationsDataGridView.DataSource = Singleton.Current.Ordonnances;

                OperationsDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
                OperationsDataGridView.BorderStyle = BorderStyle.Fixed3D;

                OperationsDataGridView.Show();
            }
            catch (InvalidCastException e)
            {
                MessageBox.Show(e.Message);
            }
        }

        public void RefreshArretsMaladieDataGridView()
        {
            ArretMaladieDataGridView.DataSource = Singleton.Current.ArretsMaladie;
            ArretMaladieDataGridView.Refresh();
            ArretMaladieDataGridView.Parent.Refresh();
        }

        public void RefreshOperationsChirurgucalesDataGridView()
        {
            OperationsDataGridView.DataSource = Singleton.Current.OperationsChirurgicales;
            OperationsDataGridView.Refresh();
            OperationsDataGridView.Parent.Refresh();
        }

        private void btn_modif_patient_Click(object sender, EventArgs e)
        {
            // Passer en mode modification des données
            Singleton.Current.ModeCourant = Singleton.Mode.Modifier;

            // Déblocage de saisie ou modification des champs
            cb_civ.Enabled = true;
            txt_nom.Enabled = true;
            txt_prenom.Enabled = true;
            txt_numrue.Enabled = true;
            txt_nomrue.Enabled = true;
            txt_compadr.Enabled = true;
            txt_cp.Enabled = true;
            txt_ville.Enabled = true;
            txt_secu.Enabled = true;

        }
        private void btn_sauvegarde_Click(object sender, EventArgs e)
        {
            if (cb_civ.Enabled == true)
            {
                bool saisie_ok = controle_saisie();
                if (saisie_ok)
                {
                    // Contrôle des champs
                    patientDb.Civilite = (Civilite)cb_civ.SelectedItem;
                    patientDb.Nom = txt_nom.Text;
                    patientDb.Prenom = txt_prenom.Text;
                    patientDb.NumRue = Convert.ToInt16(txt_numrue.Text);
                    patientDb.NomRue = txt_nomrue.Text;
                    patientDb.ComplementAdresse = txt_compadr.Text;
                    patientDb.CodePostal = txt_cp.Text;
                    patientDb.Ville = txt_ville.Text;
                    patientDb.NumeroSecuriteSociale = txt_secu.Text;

                    switch (Singleton.Current.ModeCourant)
                    {
                        case Singleton.Mode.Nouveau:
                            Patient.Create(patientDb);
                            DossierMedical DossierMedicalDB=new DossierMedical{PatientID=patientDb.PatientID};
                            DossierMedical.Create(DossierMedicalDB);
                            patientDb.DocumentID = DossierMedicalDB.DocumentID;
                            Patient.Update(patientDb);
                            MessageBox.Show("Patient créé !");
                            break;

                        case Singleton.Mode.Modifier:
                            Patient.Update(patientDb);
                            MessageBox.Show("Sauvegarde effectuée !");
                            break;
                    }

                    InitializeArretMaladieDataGridView();

                    // rafraichissement du datagridview présent sur la page d'accueil
                    MainForm EcranPrincipal = new MainForm();
                    EcranPrincipal.RefreshPatientDataGridView();

                    // Passer en mode consultation des données
                    Singleton.Current.ModeCourant = Singleton.Mode.Consultation;
                    cb_civ.Enabled = false;
                    txt_nom.Enabled = false;
                    txt_prenom.Enabled = false;
                    txt_numrue.Enabled = false;
                    txt_nomrue.Enabled = false;
                    txt_compadr.Enabled = false;
                    txt_cp.Enabled = false;
                    txt_ville.Enabled = false;
                    txt_secu.Enabled = false;
                }
            }
        }

        private void btn_ajout_patient_Click(object sender, EventArgs e)
        {
            // Passer en mode création des données
            Singleton.Current.ModeCourant = Singleton.Mode.Nouveau;

            cb_civ.Enabled = true;
            txt_nom.Enabled = true;
            txt_prenom.Enabled = true;
            txt_numrue.Enabled = true;
            txt_nomrue.Enabled = true;
            txt_compadr.Enabled = true;
            txt_cp.Enabled = true;
            txt_ville.Enabled = true;
            txt_secu.Enabled = true;

            cb_civ.SelectedItem = "";
            txt_nom.Text = "";
            txt_prenom.Text = "";
            txt_numrue.Text = "";
            txt_nomrue.Text = "";
            txt_compadr.Text = "";
            txt_cp.Text = "";
            txt_ville.Text = "";
            txt_secu.Text = "";
        }

        private bool controle_saisie()
        {
            bool saisie_ok = false;
            if (txt_nom.Text == "")
            {
                MessageBox.Show("Veuillez saisir le nom du patient");
            }
            else if (txt_prenom.Text == "")
            {
                MessageBox.Show("Veuillez saisir le prénom du patient");
            }
            else if (txt_nomrue.Text == "")
            {
                MessageBox.Show("Veuillez saisir le nom de rue du patient");
            }
            else if (txt_cp.Text == "")
            {
                MessageBox.Show("Veuillez saisir le code postal du patient");
            }
            else if (txt_ville.Text == "")
            {
                MessageBox.Show("Veuillez saisir la ville du patient");
            }
            else if (txt_secu.Text == "")
            {
                MessageBox.Show("Veuillez saisir le numéro de sécurité sociale du patient");
            }
            else if (txt_nom.Text.GetType() != typeof(string))
            {
                MessageBox.Show("Le nom du patient ne peut pas contenir de chiffre");
            }
            else if (txt_prenom.Text.GetType() != typeof(string))
            {
                MessageBox.Show("Le prénom du patient ne peut pas contenir de chiffre");
            }
            else if (txt_secu.Text.Length != 15)
            {
                MessageBox.Show("Veuillez saisir un numéro de sécurité sociale valide");
            }
            else saisie_ok = true;

            return saisie_ok;
        }

        private void btn_ajoutArret_Click(object sender, EventArgs e)
        {
            Singleton.Current.ModeCourant = Singleton.Mode.Nouveau;

            ArretMaladieForm EcranArret = new ArretMaladieForm();
            EcranArret.patientDb = patientDb;
            EcranArret.arretmaladieDB = new ArretMaladie();
            EcranArret.ShowDialog();
        }

        private void ArretMaladieDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewSelectedRowCollection rows = ArretMaladieDataGridView.SelectedRows;
            Singleton.Current.ModeCourant = Singleton.Mode.Consultation;
            ArretMaladieForm EcranArret = new ArretMaladieForm();
            EcranArret.patientDb = patientDb;
            EcranArret.arretmaladieDB = (ArretMaladie)rows[0].DataBoundItem;
            EcranArret.ShowDialog();
        }

        private void btn_ajout_operations_Click(object sender, EventArgs e)
        {
            Singleton.Current.ModeCourant = Singleton.Mode.Nouveau;

            OperationChirurgicaleForm EcranOperation = new OperationChirurgicaleForm();
            EcranOperation.patientDb = patientDb;
            EcranOperation.operationchirurgicaleDb = new OperationChirurgicale();
            EcranOperation.ShowDialog();
        }

        private void OperationsDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewSelectedRowCollection rows = OperationsDataGridView.SelectedRows;
            Singleton.Current.ModeCourant = Singleton.Mode.Consultation;
            OperationChirurgicaleForm EcranOperationChirurgicale = new OperationChirurgicaleForm();
            EcranOperationChirurgicale.patientDb = patientDb;
            EcranOperationChirurgicale.operationchirurgicaleDb = (OperationChirurgicale)rows[0].DataBoundItem;
            EcranOperationChirurgicale.ShowDialog();
        }
    }
}
